package Day014_Lambda表达式_Stream流.demo02_Stream流;

import java.util.*;
import java.util.stream.Stream;

/**
 * @author zhangyan
 * @date 2020/5/5 11:34
 */
/*
    java.util.stream.Stream<T> 是Java 8新加入的最常用的流接口。（这并不是一个函数式接口。）

获取一个流的方式：
        1.所有的 Collection 集合都可以通过 stream 默认方法获取流
        2.Stream 接口的静态方法 of 可以获取数组对应的流


        1. 根据Collection获取流
              default Stream<E> stream();返回一个流对象
                通过list集合
                通过set集合

        2. 根据Map获取流
               通过Map集合的键
               通过Map集合的值
               通过Map集合的键值对

        3. 根据数组获取流
               通过Stream接口中的of方法: static <T> Stream<T> of(T...value); //可变参数

        4.通过直接传入多个元素获取流
               通过Stream接口中的of方法: static <T> Stream<T> of(T...value);
                of 方法的参数其实是一个 可变参数 ，所以支持数组!
*/

public class Test3_获取流的方式 {
    public static void main(String[] args) {

        //1. 根据Collection获取流
        //1.1 通过list集合
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张三丰");
        list.add("张杰");
        Stream<String> stream1 = list.stream();

        //1.2 通过Set集合
        Set<String> set = new HashSet<>();
        set.add("张无忌");
        set.add("周芷若");
        set.add("赵敏");
        set.add("张三丰");
        set.add("张杰");
        Stream<String> stream2 = set.stream();

        //2. 根据Map获取流
        Map<String,String> map = new HashMap<>();
        map.put("谢霆锋","张柏芝");
        map.put("王宝强","马蓉");
        map.put("贾乃亮","李小璐");
        map.put("陈羽凡","白百何");

        //2.1通过Map集合的键
        Set<String> keySet = map.keySet();
        Stream<String> stream3 = keySet.stream();

        //2.2通过Map集合的值
        Collection<String> values = map.values();
        Stream<String> stream4 = values.stream();

        //2.3通过Map集合的键值对
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        Stream<Map.Entry<String, String>> stream5 = entrySet.stream();

        //3. 根据数组获取流
        int[] arr = {1,2,3,4,5};
        Stream<int[]> stream6 = Stream.of(arr);
        String[] arr1 = {"谢霆锋","张柏芝"};
        Stream<String> stream7 = Stream.of(arr1);

        //4. 直接传入多个元素获取流
        Stream<Integer> integerStream = Stream.of(1, 2, 3);

    }
}
